package Abstract_;

public class Abstract01 {
    public static void main(String[] args) {
        //抽象类不能被实例化
        //new Animal();
        Animal cat = new Cat("jack");
    }
}

abstract class Animal{
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    //这里实现了eat方法，但没有什么意义，此时考虑将该方法设计为抽象方法
    //当一个类中存在抽象方法的时候，需要将该类声明为abstract类
    //所谓抽象方法就是没有实现的方法，即没有方法体
    //一般来说抽象类会被继承，由其子类实现抽象方法
//    public void eat(){
//    }

    public abstract void eat();


    //抽象方法不能使用private,final,static关键字来修饰，因为这些关键字是和重写相违背的
    //private abstract void hi();
    //public final abstract void hi();
    //public static abstract void hi();

}

//如果一个类继承了抽象类，则他必须实现抽象类中的所有抽象方法，除非他自己也是一个抽象类
abstract class Dog extends Animal{
    public Dog(String name) {
        super(name);
    }

}

class Cat extends Animal{
    public Cat(String name) {
        super(name);
    }

    @Override
    public void eat() {

    }
}
